package gdconf

import (
	"server_cluster/common/logger"
)

// 战斗组配置表

// 战斗组类型
const (
	BattleGroupTypeSceneMonster = 1 // 场景怪物
	BattleGroupTypeDungeon      = 2 // 地牢副本
	BattleGroupTypeTower        = 3 // 爬塔
)

// 解锁条件
const (
	BattleGroupUnlockCondTypeFinishQuest = 1 // 完成子任务 参数1:子任务id
)

// 刷新类型
const (
	BattleGroupRefreshTypeNever      = 0 // 永不刷新
	BattleGroupRefreshTypeEnterScene = 1 // 进入场景刷新
	BattleGroupRefreshTypeDaily      = 2 // 每日刷新
)

// 额外奖励条件
const (
	BattleGroupExtRewardCondTypeCurrQuest = 1 // 当前拥有子任务 参数1:子任务id
)

type BattleGroupConfig struct {
	BattleGroupId  int32    `csv:"ID" gorm:"primary_key;autoIncrement:false"` // 战斗组id
	SceneId        int32    `csv:"SceneID,omitempty"`                         // 所在场景
	Type           int32    `csv:"BattleType,omitempty"`                      // 战斗组类型
	FightIdList    IntArray `csv:"BattleGroup,omitempty"`                     // 战斗id列表
	RefreshType    int32    `csv:"RefreshRule,omitempty"`                     // 刷新类型
	UnlockCond     IntArray `csv:"UnlockCondition,omitempty"`                 // 解锁条件
	OnceRewardList IntArray `csv:"FirstReward,omitempty"`                     // 首次通关奖励id列表
	RewardList     IntArray `csv:"RepeatReward,omitempty"`                    // 奖励id列表
	ExtRewardCond  IntArray `csv:"ExtRewardCond,omitempty"`                   // 额外奖励条件
	GroupTag       int32    `csv:"GroupTag,omitempty"`                        // 撞怪是否能撞死
}

func (b *BattleGroupConfig) TableName() string {
	return "config_battle_group_logic"
}

func (g *GameDataConfig) saveBattleGroupConfig() {
	saveTableToDb[BattleGroupConfig](g.Db, readTable[BattleGroupConfig](g.CsvPathPrefix+"BattleGroup.csv"))
}

func (g *GameDataConfig) loadBattleGroupConfig() {
	g.GameDataMaps.BattleGroupConfigMap = make(map[int32]*BattleGroupConfig)
	for _, battleGroupConfig := range loadTableFromDb[BattleGroupConfig](g.Db) {
		g.GameDataMaps.BattleGroupConfigMap[battleGroupConfig.BattleGroupId] = battleGroupConfig
	}
	logger.Info("BattleGroupConfig Count: %v", len(g.GameDataMaps.BattleGroupConfigMap))
}

func GetBattleGroupConfig(battleGroupId int32) *BattleGroupConfig {
	value, exist := CONF.GameDataMaps.BattleGroupConfigMap[battleGroupId]
	if !exist {
		logger.Error("[ConfigNotFound] BattleGroupConfig, battleGroupId: %v", battleGroupId)
		return nil
	}
	return value
}

func GetBattleGroupConfigMap() map[int32]*BattleGroupConfig {
	return CONF.GameDataMaps.BattleGroupConfigMap
}
